package org.larkdoc.dao;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.larkdoc.model.bo.ProjectBO;
import org.larkdoc.model.entity.ProjectInfo;
import org.larkdoc.model.vo.ProjectVO;

/**
 * 项目信息Mapper接口类
 * 
 * @author  zhangpeijun[zhangpeijun1024@qq.com]
 * @version  [v1.0.1, 2017年10月17日]
 * @see  [相关类/方法]
 * @since  [产品/模块版本]
 */
@Mapper
public interface ProjectInfoMapper {
    /**
     * 根据ID删除数据
     * @param id
     * @return
     * 
     * @returns int
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年10月17日下午12:03:42
     */
    int deleteByPrimaryKey(Integer id);
    
    /**
     * 新增数据
     * @param record
     * @return
     * 
     * @returns int
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年10月17日下午12:07:04
     */
    int insert(ProjectInfo record);
    
    /**
     * 新增记录，只记录对象非空属性
     * @param record
     * @return
     * 
     * @returns int
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年10月17日下午12:10:03
     */
    int insertSelective(ProjectInfo record);
    
    /**
     * 根据ID查询数据
     * @param id
     * @return
     * 
     * @returns ProjectInfo
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年10月17日下午12:13:49
     */
    ProjectInfo selectByPrimaryKey(Integer id);
    
    /**
     * 根据ID更新记录，只更新参数中非空的属性
     * @param record
     * @return
     * 
     * @returns int
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年10月17日下午12:16:17
     */
    int updateByPrimaryKeySelective(ProjectInfo record);
    
    /**
     * 根据ID更新记录
     * @param record
     * @return
     * 
     * @returns int
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年10月17日下午12:18:03
     */
    int updateByPrimaryKey(ProjectInfo record);
    
    /**
     * 根据ProjectVO获取数据，按update_time倒叙返回
     * @param record
     * @return [参数说明]
     * 
     * @return List<ProjectInfo> [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年7月4日下午3:35:42
     */
    List<ProjectInfo> selectByProjectInfo(ProjectVO record);
    
    /**
     * 根据ID集和帐号删除记录
     * @param ids
     * @param account
     * @return
     * 
     * @returns int
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年10月17日下午12:29:41
     */
    int deleteByIdsAndAccount(@Param("ids") int[] ids, @Param("account") String account);
    
    /**
     * 匹配返回存在的ID
     * @param ids
     * @return [参数说明]
     * 
     * @return List<Integer> [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年7月6日上午11:33:04
     */
    List<Integer> filterIds(@Param("ids") List<Integer> ids);
    
    /**
     * 根据id集查询数据
     * @param docIds
     * @return
     * 
     * @returns List<ProjectInfo>
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年10月17日下午12:30:02
     */
    List<ProjectInfo> selectByDocIds(@Param("ids") List<Integer> docIds);
    
    /**
     * 根据文档id获取记录
     * @param docId
     * @return
     * 
     * @returns List<ProjectInfo>
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年10月17日下午12:30:20
     */
    List<ProjectInfo> selectByDocId(@Param("id") Integer docId);
    
    /**
     * 根据ProjectVO获取数据，按update_time倒叙返回
     * @param record
     * @return [参数说明]
     * 
     * @return List<ProjectInfo> [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年7月4日下午3:35:42
     */
    List<ProjectBO> selectByProjectVO(ProjectVO record);
    
    /**
     * 根据用户和项目ID过滤用户有权限的项目ID
     * @param userId
     * @param idList
     * @param creator
     * @return
     * 
     * @returns List<Integer>
     * @see [类、类#方法、类#成员]
     * @author  zhangpeijun[zhangpeijun1024@qq.com]<br/>
     *          2017年12月19日上午10:21:18
     */
    List<Integer> selectIdsByUser(@Param("userId")Integer userId, @Param("idList") List<Integer> idList, 
        @Param("creator") String creator);
}